/**
 * @file iic.h
 * @author chushang (email:chushangcs@163.com)
 * @brief iic的基本时序单元,除了停止时序,其他时序单元结束时都会先拉低SCL,方便下一个时序单元的拼接
 * @version 0.1
 * @date 2025-04-28
 *
 * @copyright Copyright (c) 2025
 *
 */

#ifndef __IIC_H
#define __IIC_H

#include "stm32f1xx_hal.h"

#define MyIIC_W_MASK        0x00
#define MyIIC_R_MASK        0x01

#define MyIIC_SCL_GPIO_PORT GPIOA
#define MyIIC_SCL_GPIO_PIN  GPIO_PIN_9

#define MyIIC_SDA_GPIO_PORT GPIOA
#define MyIIC_SDA_GPIO_PIN  GPIO_PIN_8

/**
 * @brief IIC开始时序,SCL高电平期间拉低SDA
 *
 */
void MyIIC_Start(void);

/**
 * @brief IIC结束时序,SCL高电平期间释放SDA
 *
 */
void MyIIC_Stop(void);

/**
 * @brief 将字节发送到IIC总线上
 *
 * @param byte [in] 待发送的字节
 */
void MyIIC_SendByte(uint8_t byte);

/**
 * @brief 接收IIC总线上的字节数据
 *
 * @return 接收到的字节数据
 */
uint8_t MyIIC_ReceiveByte(void);

/**
 * @brief 发送应答位
 *
 * @param ack [in] 应答位,0或1
 */
void MyIIC_SendACK(void);

/**
 * @brief 发送非应答位
 *
 */
void MyIIC_SendNACK(void);

/**
 * @brief 接收总线上的应答位
 *
 * @return 应答位,0应答,1非应答
 */
uint8_t MyIIC_ReceiveACK(void);

#endif // !__IIC_H